#include <iostream>

using namespace std;

/*
    函数重载(Function Overload):可以用同一个函数名定义不同的函数，当函数名和不同的参数搭配时函数的含义不同
    实现函数重载的条件:
    ·同一个作用域     ·参数个数不同     ·参数类型不同     ·参数顺序不同

    实现原理:
    1、编译器在将我们的程序编译完成后会将变量和函数变成一个一个的符号，存放这些符号的表格我们称之为符号表
    2、对程序进行编译查看函数对应的符号。
    ·编译命令：g++ -c overload.cpp
    ·执行命令：nm overload.o 查看符号表
        T _Z4funcc
        T _Z4funcci
        T _Z4funci
        T _Z4funcic
        T _Z4funcii
        T _Z4funcv
    就可以发现g++编译器在将函数转换成符号时，是根据函数名、形参类型进行转化的。
 */
void func() { cout << "void func()" << endl; }

void func(int x) { cout << "void func(int x)" << endl; }

void func(char x) { cout << "void func(char x)" << endl; }

void func(int x, int y) { cout << "void func(int x, char y)" << endl; }

void func(int x, char y) { cout << "void func(int x,  chary)" << endl; }

void func(char y, int x) { cout << "void func(char x, int y)" << endl; }

int main() {
    func();
    func(10);
    func('H');
    func(10,20);
    func(10,'a');
    func('a', 10);
    return 0;
}
